﻿//手抄表测试程序

#include <hspos.h>

//#define uchar unsigned char

//数据库字段编号定义
#define BH 0  //记录编号
#define SBBH 1 //水表编号
#define SCDS 2 //上次读数
#define BCDS 3 //本次读数
#define DW   4  //吨位
#define CBSJ 5  //抄表时间  
#define CBZT 6  //抄表状态 0：未抄 1：已抄 默认为0
#define CBRY 7 //抄表人员
#define RJYS 8 //日均用水量

int num;  //全局变量记录号
void zdcb();
void sdcb();
void data_view();
void user_ctrl();
void stati();
void ref_data();
void user_add();
void user_del();
uchar search_data(uchar fn);
void input_data();
void disp_wcid(int r,uchar *wid);
void fy_disp_wcid(uchar r,uchar *wid);
void disp_data(int r);
void fy_disp();
int wcpd(int r);

void Uart0_CMD_Send(void);
void Uart0_CMD_Stop(void);
int wcpd(int r);
void dateup(  uchar *d);
unsigned  BH_Search(unsigned short Addr);
void DW_compute( uchar *by,  uchar *sy);

uchar rxbuf[256],rxcount;
uchar total;
/********************************************************** */
//函数功能：应用程序主函数
//函数入口：无
//函数出口：返回 0
/********************************************************* */
int main()
{
    uchar rt,k,date[10];

    screen(1);//设定为汉字显示状态
    rt=libuse("data.dbf",0);	//打开data.dbf数据库，顺序为一
    if(rt!=0)
    {
        cls();
        putstr("打开数据库错误");
        bell(50);
        key(0);
    }
    libopen(0);
    total = libsumr();

    Uart0_Init(B115200   ,0x03, UART_ON);  //UART0 打开
    while(1)
    {
        cls();  //清屏
        moveto(1,6);
        putstr_h("抄表测试");
        moveto(4,4);
        putstr_h("[1] 自动抄表");
        moveto(6,4);
        putstr_h("[2] 手动抄表");
        moveto(8,4);
        putstr_h("[3] 数据查询");
        moveto(10,4);
        putstr_h("[4] 用户管理");
        moveto(12,4);
        putstr_h("[5] 统计信息");
        moveto(14,4);
        putstr_h("[6] 刷新数据");
        moveto(16,4);
        putstr_h("[F2] 退出");
        getdate(date);
        moveto(19,2);
        putstr("日期: ");
        putstr_h(date);
        do {
            k=key(0);
        }
        while(k!=0x31&&k!=0x32&&k!=0x33&&k!=0x34&&k!=0x35&&k!=0x36&&k!=0x89); //判断输入的键值,若输入的不是'1','2','3'，‘4’,'5'或'F2'则继续等待输入
        switch(k)// 根据输入的按键调用相应的函数
        {
        case '1':
            zdcb();
            break;  //自动无线抄表
        case '2':
            sdcb();
            break;  //手动输入水表号抄表
        case '3':
            data_view();
            break;  //浏览对应水表号数据
        case '4':
            user_ctrl();
            break;  //对用户数据库进行管理
        case '5':
            stati();
            break;  //统计抄表信息
        case '6':
            ref_data();
            break; //刷新数据
        case 0x89:
            return;//退出
        }
    }
    return 0;
}

int testlen;
#define FRAMELEN_MAX 9
//自动无线抄表
void zdcb(void)
{
    uchar addr,k; //读取的从设备的地址
    unsigned int WM_value; // 读取的水量值
    uchar P_rx,P_database;//
    uchar xdata[60],kdata[60]; // 用来读取数据库中的数据
    uchar itoa_data[60],l; // 将int型转为char型保存数据的数组和长度
    uchar frame_n;
    Uart0_CMD_Send();
    Uart0_CMD_Send();
    Uart0_CMD_Send();
    Uart0_CMD_Send();
    cls();
    moveto(15,14);
    putstr("   "); // 清一屏
    moveto(10,1);
    putstr_h("正在读水表，请稍等……");
    moveto(19,1);
    putstr_h("[清除] 退出");
    Uart0_CMD_Send();
    rxcount = 0;
    moveto(1,1);
    do
    {
rev_start:
        k = keygo();
        while(1)
        {
            if(Uart0_getrxstate()!=0)
            {
                rxbuf[rxcount++] = Uart0_getrxbuf();
                if( !(rxbuf[0] &0x80))  	//最高位校验
                {
                    rxcount = 0;
                }
                //putchhex(rxbuf[0]);
            }
            else break;
        }

        if( FRAMELEN_MAX <= rxcount )       //校验数据帧完整
        {
            addr = (unsigned short)(rxbuf[3]<<8) + (unsigned short)rxbuf[4];   //水表地址

            //P_database = BH_Search(addr);
            P_database = addr;
            //if(P_database >= total)
            {
                //   rxcount = 0;
                //	goto   rev_start;
            }
            clsn(1,18);
            moveto(16,1) ,putchhex(P_rx++);
            moveto(1,1);
            putstr("户号:");
            libset(P_database,BH);
            libread(kdata);
            putstr_h(kdata);
            moveto(3,1);
            putstr("表号:");
            libset(P_database,SBBH);
            libread(kdata);
            putstr_h(kdata);

            libset(P_database,SCDS);
            libread(xdata);
            moveto(7,1);
            putstr("上月读数:");
            putstr_h(xdata);

            WM_value = (unsigned int)(rxbuf[5]<<24)+ (unsigned int)(rxbuf[6]<<16) +
                       (unsigned int)(rxbuf[7]<<8) + (unsigned int)(rxbuf[8]);


            l = itos(WM_value,itoa_data);
            itoa_data[l] = '\0';
            libset(P_database,BCDS);
            libwrite(itoa_data); //写入数据库 本次读数
            moveto(9,1);
            putstr("本月读数:");
            putstr_h(itoa_data);

            DW_compute(itoa_data,xdata);   //吨位值存放在xdata中

            libset(P_database,DW);
            libwrite(xdata); // 写入数据库 吨位
            moveto(11,1);
            putstr("本月水量:");
            putstr_h(xdata);

            dateup(xdata);
            libset(P_database,CBSJ);
            libwrite(xdata); //抄表时间写入数据库

            libset(P_database,CBZT);
            libwrite("1"); //写入字符1

            rxcount = 0;

        }
    }
    while(k!=0x82);

    Uart0_CMD_Stop();
    //Uart0_Init(B115200 ,0x03, UART_OFF);  //UART0 关闭
}

void Uart0_CMD_Send(void)
{
    Uart0_putbyte(0xAB);   //命令起始字节
    Uart0_putbyte(0x04);	//以下字节长度
    Uart0_putbyte(0x81);	//命令
    Uart0_putbyte(0xFF);	//地址高位
    Uart0_putbyte(0xFF);	//地址低位
    Uart0_putbyte(0xD1);	//校验字节=0XFF-以上字节之和
}

void Uart0_CMD_Stop(void)
{
    Uart0_putbyte(0xAB);
    Uart0_putbyte(0x04);
    Uart0_putbyte(0x80);
    Uart0_putbyte(0xFF);
    Uart0_putbyte(0xFF);
    Uart0_putbyte(0xD2);
}
// 将取出的当天日期格式由yyyy.mm.dd转换为yyyymmdd
void dateup(  uchar *d)
{
    char d1[12];
    getdate(d1);
    d[0]=d1[0];
    d[1]=d1[1];
    d[2]=d1[2];
    d[3]=d1[3];
    d[4]=d1[5];
    d[5]=d1[6];
    d[6]=d1[8];
    d[7]=d1[9];
    d[8]=0;
}
//比较从串口接收的地址和数据库中的地址
unsigned  BH_Search(unsigned short Addr)
{
    char sum[30],kdata[30];
    uchar l;
    unsigned short i;
    l=itos((unsigned int)Addr,sum);
    sum[l]='\0';

    libopen(0);//打开第1数据库;
    for(i=0; i<total; i++)
    {
        libset(i,BH);
        libread(kdata);
        if(!strcmp(sum,kdata)) break;
    }
    if(i != total && !wcpd(i))
    {
        return i;
    }
    else return total;  // total 表示数据库中没有此地址的数，或次地址的数据已经更新了
}
// 计算本月底度(by)-上月底度(sy),l为上月底度的位数,结果放在sy
// 若by<sy,则by-sy+10*l
void DW_compute( uchar *by,  uchar *sy)
{
    uchar gg[25],l;
    long i;
    l=strlen(sy);
    for(i=0; i<l; i++)if(sy[i]=='.')break;
    l=i;
    strsub(by,sy,10);
    if(sy[0]=='-')
    {
        gg[0]='1';
        for(i=1; i<=l; i++)  {
            gg[i]='0';
        }
        gg[i]=0;
        stradd(gg,sy,20);
    }
}
//手动录入本次读数，“上翻” “下翻”改变所要录入的记录号
void sdcb()
{
    uchar k,total;
    while(1)
    {
        search_data(SBBH);
        total=libsumr();
        if(num==0xff)
        {
            cls();
            moveto(5,1);
            putstr("无此水表编号请重新输入");
            delayms(800);
        }
        else
        {
            disp_data(num);
            moveto(19,1);
            putstr("[F1]抄表");
            moveto(19,12);
            putstr("[F2]退出");
            while(1)
            {
                do {
                    k=key(0);
                }
                while(k!=0x88&&k!=0x89&&k!=0x8e&&k!=0x8f); //判断输入的键值,若输入的不是'F1','F2','上翻','下翻'则继续等待输入
                switch(k)// 根据输入的按键调用相应的函数
                {
                case 0x88:
                    cls();
                    disp_data(num);
                    input_data();
                    disp_data(num);
                    moveto(19,1);
                    putstr("[F1]抄表");
                    moveto(19,12);
                    putstr("[F2]退出");
                    k = 0;
                    break;

                case 0x8e:
                    num--;
                    if(num<0) num=total-1;
                    disp_data(num);
                    k = 0;
                    moveto(19,1);
                    putstr("[F1]抄表");
                    moveto(19,12);
                    putstr("[F2]退出");
                    break;
                    //判断记录号是否到顶和尾循环显示
                case 0x8f:
                    num++;
                    if(num==total) num=0;
                    disp_data(num);
                    k = 0;
                    moveto(19,1);
                    putstr("[F1]抄表");
                    moveto(19,12);
                    putstr("[F2]退出");
                    break;

                case 0x89:
                    return;//退出
                }
            }
        }
    }
}

/****************************************************************/
//浏览数据库信息
/****************************************************************/
void data_view()
{
    search_data(SBBH);
    if(num==0xff)
    {
        cls();
        moveto(1,1);
        putstr("搜索无此记录请重新输入");
        key(0);
    }
    else
    {
        disp_data(num);
        fy_disp();
    }
}

/*************************************************************/
//函数功能：管理用户数据库，删除和添加
//函数入口：无
//函数出口：无
/*************************************************************/
void user_ctrl()
{
    uchar k;

    while(1)
    {
        cls();
        moveto(4,4);
        putstr_h("[1]增加用户");
        moveto(7,4);
        putstr_h("[2]删除用户");
        moveto(19,13);
        putstr_h("[F2]退出");
        do {
            k=key(0);
        }
        while(k!=0x31&&k!=0x32&&k!=0x89); //判断输入的键值,若输入的不是'1','2'或'F2'则继续等待输入
        switch(k)// 根据输入的按键调用相应的函数
        {
        case '1':
            user_add();
            disp_data(num);
            fy_disp();
            break;
        case '2':
            user_del();
            break;
        case 0x89:
            return;//退出
        }
    }
}


/*************************************************************/
//函数功能：统计数据库信息，显示用户总数，用水总量，已抄和未抄数
//函数入口：无
//函数出口：无
/*************************************************************/
void stati()
{
    int total,n,i,m=0;
    uchar idtotal[10];
    uchar wcid[2000]; 	//保存未抄用户记录号
    uchar ysl[10];
    uchar temp[10];
    uchar ysltotal[10];
    uchar x,y,l,k,j=0;
    total=libsumr();  //统计记录数
    memset(ysltotal,0,sizeof(ysltotal));
    memset(ysl,0,sizeof(ysl));
    memset(wcid,0,2000);
    memset(temp,0,10);
    for(n=0; n<total; n++) //将未抄用户水表号存入wcid[]，并用逗号隔开
    {
        libset(n,DW);
        libread(ysl);
        stradd(ysl,ysltotal,sizeof(ysltotal));
        if(wcpd(n)==0)
        {
            m++;
            libset(n,SBBH);
            l=libread(temp);
            strncat(wcid,temp,l);
            strcat(wcid,",");
        }
    }
    i=strlen(wcid);
    l=itos(total,idtotal);
    idtotal[l]=0;
    cls();
    moveto(1,4);
    putstr("用户信息统计");
    moveto(4,1);
    putstr("当前用户总数：");
    putstr(idtotal);

    moveto(7,1);
    putstr("已抄用水总量：");
    putstr(ysltotal);

    l=itos(m,idtotal);
    idtotal[l]=0;
    moveto(12,1);
    putstr("未抄用户数：");
    putstr(idtotal);

    total=total-m;
    l=itos(total,idtotal);
    idtotal[l]=0;
    moveto(15,1);
    putstr("已抄用户数：");
    putstr(idtotal);

    moveto(19,1);
    putstr("[F1]查看未抄");
    moveto(19,13);
    putstr("[F2]退出");
    do {
        k=key(0);
    }
    while(k!=0x88&&k!=0x89); //判断输入的键值,若输入的不是'F1','F2'则继续等待输入
    switch(k)// 根据输入的按键调用相应的函数
    {
    case 0x88:
        disp_wcid(i,wcid);
        k = 0;
        return;
        break;  //显示全部未抄水表编号

    case 0x89:
        return;
        break;//退出
    }
    key(0);
}


/********************************************************** */
//函数功能：在数据库末尾添加记录
//函数入口：无
//函数出口：无
/********************************************************** */
void user_add()
{
    uchar id[10];
    uchar id_1[10];
    uchar bdata[10];
    uchar sdata[10];
    uchar ysl[10];
    uchar date[10];
    uchar len;
    int f,total;
    total=libsumr();
    num=total;
    do
    {
        if(num!=total)
        {
            cls();
            moveto(1,1);
            putstr("输入水表号已存在请重新输入");
            delayms(1000);
        }
        cls();
        moveto(4,1);
        putstr("请输入所要添加的水表号：");
        memset(id,0,sizeof(id));
        len=keys(id);
        for(num=0; num<total; num++)
        {
            libset(num,SBBH);
            memset(id_1,0,sizeof(id_1));
            libread(id_1);
            f=strncmp(id_1,id,len);
            if(!f) break;
        }
    }
    while(num!=total);

    libapp();
    total=libsumr()-1;
    libset(total,SBBH);
    libwrite(id);
    libset(total,BCDS);
    cls();
    moveto(4,1);
    putstr("请输入本次读数：");
    memset(bdata,0,sizeof(bdata));
    keys(bdata);
    libwrite(bdata);
    libset(total,SCDS);
    cls();
    moveto(4,2);
    putstr("请输入上次数据：");
    memset(sdata,0,sizeof(sdata));
    keys(sdata);
    libwrite(sdata);
    cls();
    moveto(10,1);
    putstr_h("正在录入，请稍等……");
    delayms(1000);
    memset(ysl,0,sizeof(ysl));
    strcpy(ysl,sdata);
    strsub(bdata,ysl,10);
    libset(total,DW);
    libwrite(ysl);
    memset(date,0,sizeof(date));
    getdate(date);
    libset(total,CBSJ);
    libwrite(date);
    delay(500);
    num=total;
}



/********************************************************** */
//函数功能：输入水表编号删除数据库中相应记录
//函数入口：无
//函数出口：无
/********************************************************** */
void user_del()
{
    uchar id[10];
    uchar id_1[10];
    uchar k,l,len;
    int total,f;
    total=libsumr();

    do
    {
        if(num==total)
        {
            cls();
            moveto(1,1);
            putstr("输入水表号不存在请重新输入");
            delayms(1000);
        }
        cls();
        moveto(4,1);
        putstr("请输入所要删除的水表号：");
        memset(id,0,sizeof(id));
        len=keys(id);
        for(num=0; num<total; num++)
        {
            libset(num,SBBH);
            memset(id_1,0,sizeof(id_1));
            libread(id_1);
            f=strncmp(id_1,id,len);
            if(!f) break;
        }
    }
    while(num==total);
    cls();
    moveto(1,1);
    putstr("确定删除");
    libset(num,SBBH);
    libread(id);
    putstr(id);
    putstr("号水表？");
    moveto(19,1);
    putstr_h("[F1]确定");
    moveto(19,13);
    putstr_h("[F2]放弃");
    do {
        k=key(0);
    }
    while(k!=0x88&&k!=0x89); //判断输入的键值,若输入的不是'确定'或'F2'则继续等待输入
    switch(k)// 根据输入的按键调用相应的函数
    {
    case 0x88:
        libdel();
        cls();
        moveto(3,4);
        putstr("删除成功");
        delayms(800);
        break;
    case 0x89:
        return;//退出
    }
}



/****************************************************************/
//刷新数据库，刷新后“本次读数”将转入“上次读数”，其他数据全部清零
/****************************************************************/
void ref_data()
{
    int total,n;
    uchar k;
    uchar xdata[10];

    cls();
    moveto(1,1);
    putstr("刷新数据库后“本次读数”将转入“上次读数”，其他数据全部清零。确定刷新数据库？");
    moveto(19,1);
    putstr("[F1]确定");
    moveto(19,12);
    putstr("[F2]放弃");
    do {
        k=key(0);
    }
    while(k!=0x88&&k!=0x89);
    if(k==0x89) return;
    total=libsumr();
    cls();
    moveto(10,4);
    putstr("正在刷新……");
    for(n=0; n<total; n++)
    {
        libset(n,BCDS);
        libread(xdata);
        libset(n,SCDS);
        libwrite(xdata);
        libset(n,BCDS);
        libwrite(" ");
        libset(n,CBZT);
        libwrite("0");
        libset(n,DW);
        libwrite(" ");
        libset(n,CBSJ);
        libwrite(" ");
    }
    cls();
    moveto(10,4);
    putstr("数据库刷新成功");
    delayms(800);
}




/********************************************************** */
//函数功能：在数据库中搜索相应记录
//函数入口：fn——要搜索的字段序号
//函数出口：最先搜索到的符合要求的记录号
/********************************************************** */
uchar search_data(uchar fn)
{
    uchar f,len,l;
    uchar kdata[10];
    uchar s[10];
    uchar idtotal[10];
    unsigned int total;

    cls();
    moveto(1,4);
    putstr_h("当前共有");
    total=libsumr();  //统计记录数
    l=itos(total,idtotal);
    idtotal[l]=0;
    putstr_h(idtotal);
    putstr_h("条记录");
    moveto(4,1);
    putstr_h("请输入水表号:");
    memset(s,0,sizeof(s));
    len=keys(s);
    for(num=0; num<total; num++)  //比较相应字段返回第一个相同的记录号
    {
        libset(num,fn);
        libread(kdata);
        f=strncmp(s,kdata,len);
        if(!f)
            break;
    }
    if(num==total)
        num=0xff;
    return(num);
}



/********************************************************** */
//函数功能：手动输入本月水表信息，自动计算当月用水量并存入数据库
//函数入口：无
//函数出口：无
/********************************************************** */
void input_data()
{
    uchar bdata[10];
    uchar sdata[10];
    uchar ysl[10];
    uchar xdate[10];

    memset(bdata,0,sizeof(bdata));
    moveto(4,11);
    putstr_x("          ",1);
    moveto(4,11);
    keys(bdata);   //输入本次读数
    delayms(1000);
    libset(num,BCDS);
    libwrite(bdata);  //本次读数写入数据库
    memset(sdata,0,sizeof(sdata));
    libset(num,SCDS);
    libread(sdata);   //读上次读数
    memset(ysl,0,sizeof(ysl));
    strcpy(ysl,sdata);
    strsub(bdata,ysl,10);    //计算用水量
    libset(num,DW);
    libwrite(ysl);  //写入用水量
    libset(num,CBZT);
    libwrite("1"); //写入抄表标志
    memset(xdate,0,sizeof(xdate));
    getdate(xdate);   //得到系统日期
    libset(num,CBSJ);
    libwrite(xdate);  //抄表日期写入数据库
}




/********************************************************** */
//函数功能：显示相应记录号信息
//函数入口：r——记录号
//函数出口：无
/********************************************************* */
void disp_data(int r)
{
    uchar id[10];  //水表编号
    uchar bdata[10]; //本次读数
    uchar sdata[10]; //上次读数
    uchar ysl[10];  //用水量
    uchar xdate[10]; //抄表日期
    uchar cbry[10];  //抄表人员
    uchar flg;

    memset(id,0,sizeof(id));
    libset(r,SBBH);
    libread(id);
    cls();
    moveto(1,1);
    putstr("水表编号：");
    putstr(id);

    flg=wcpd(r);
    moveto(1,17);
    switch(flg)
    {
    case 0:
        putstr_x("未抄",1);
        break;
    case 1:
        putstr_x("已抄",1);
        break;
    }
    memset(bdata,0,sizeof(bdata));
    libset(r,BCDS);
    libread(bdata);
    moveto(4,1);
    putstr("本月读数：");
    putstr(bdata);

    memset(sdata,0,sizeof(sdata));
    libset(r,SCDS);
    libread(sdata);
    moveto(7,1);
    putstr("上月读数：");
    putstr(sdata);

    memset(ysl,0,sizeof(ysl));
    libset(r,DW);
    libread(ysl);
    moveto(10,1);
    putstr("用水量：");
    putstr(ysl);

    memset(cbry,0,sizeof(cbry));
    libset(r,CBRY);
    libread(cbry);
    moveto(13,1);
    putstr("抄表人员：");
    putstr(cbry);

    memset(xdate,0,sizeof(xdate));
    libset(r,CBSJ);
    libread(xdate);
    moveto(16,1);
    putstr("更新日期：");
    putstr(xdate);
}




/********************************************************** */
//函数功能：翻页显示数据库信息  [f2]退出
//函数入口：无
//函数出口：无
/********************************************************** */
void fy_disp()
{
    uchar k,total;
    total=libsumr(); //统计记录总数
    while(1)
    {
        do {
            k=key(0);
        }
        while(k!=0x8e&&k!=0x8f&&k!=0x89);
        switch(k)
        {
        case 0x8e:
            num--;
            if(num<0)num=total-1;
            disp_data(num);
            k = 0;
            break;    //判断记录号是否到顶和尾循环显示
        case 0x8f:
            num++;
            if(num==total) num=0;
            disp_data(num);
            k = 0;
            break;
        case 0x89:
            return;
            break;
        default:
            break;
        }
    }
}


/****************************************************************/
//未抄判断,读取指定记录的抄表标志,若为未抄返回0,否则返回1
/****************************************************************/
int wcpd(int r)
{
    uchar l,bzs[10];
    int n;
    libset(r,CBZT);
    l=libread(bzs);
    n=stoi(l,bzs);
    return(n);
}


/****************************************************************/
//函数功能：分屏显示未抄水表号
//函数入口：r-保存未抄水表号的数组长度 wid-保存水表号的数组
/****************************************************************/
void disp_wcid(int r,uchar *wid)
{
    uchar k,x,y;
    int m,n;


    if(r<=160)
    {
        cls();
        moveto(1,1);
        putstr("未抄用户:");
        moveto(3,1);
        putstr(wid);
        x=getx();
        y=gety();
        moveto(x,y-1);
        putstr(" ");
        moveto(19,13);
        putstr("[F2]退出");
        do {
            k=key(0);
        }
        while(k!=0x89);
    }

    if(r>160)
    {
        fy_disp_wcid(0,wid);
        moveto(19,1);
        putstr("未完请下翻");
        m=r/160;  //总屏数
        while(1)
        {
            do {
                k=key(0);
            }
            while(k!=0x8e&&k!=0x8f&&k!=0x89);
            switch(k)
            {
            case 0x8e:
                n--;
                if(n<0)n=m;
                fy_disp_wcid(n,wid);
                if(n==m) {
                    x=getx();    //显示到末尾清除最后一个“，”
                    y=gety();
                    moveto(x,y-1);
                    putstr(" ");
                }
                else {
                    moveto(19,1);
                    putstr("未完请下翻");
                }
                k = 0;
                break;

            case 0x8f:
                n++;
                if(n>m)n=0;
                fy_disp_wcid(n,wid);
                if(n==m) {
                    x=getx();    //显示到末尾清除最后一个“，”
                    y=gety();
                    moveto(x,y-1);
                    putstr(" ");
                }
                else {
                    moveto(19,1);
                    putstr("未完请下翻");
                }
                k = 0;
                break;
            case 0x89:
                return;
            }
        }
    }
}

/****************************************************************/
//显示第r屏的未抄水表号
/****************************************************************/
void fy_disp_wcid(uchar r,uchar *wid)
{
    int rt;
    uchar temp[200];
    uchar i;


    rt=r*160;
    cls();
    moveto(1,1);
    putstr("未抄用户:");
    moveto(19,13);
    putstr("[F2]退出");
    memset(temp,0,200);
    for(i=0; i<160; i++)
    {
        temp[i]=wid[i+rt];
    }
    moveto(3,1);
    putstr(temp);
}











